/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Dao;

import Model.FornecedorModel;
import Model.ComboGenericModel;
import Utils.HibernateUtil;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.*;

/**
 *
 * @author Thiago
 */
public class FornecedorDaoImp implements FornecedorDao {

    /**
     * @description Salva um fornecedor
     * @param fornecedor (objeto fornecedor)
     * @return
     * @author Thiago Cezar Silverio
     */
    public void save(FornecedorModel fornecedor) {
        try {
            Session session = HibernateUtil.getSessionFactory().openSession();
            session.beginTransaction();
            session.save(fornecedor);
            session.getTransaction().commit();
        } catch (Exception ex) {
            String erro = ex.getMessage();
        }

    }

    /**
     * @description remove um fornecedor
     * @param fornecedor (objeto fornecedor)
     * @return
     * @author Thiago Cezar Silverio
     */
    public void remove(FornecedorModel fornecedor) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();
        session.delete(fornecedor);
        session.getTransaction().commit();
    }

    /**
     * @description altera um fornecedor
     * @param fornecedor (objeto fornecedor)
     * @return
     * @author Thiago Cezar Silverio
     */
    public void update(FornecedorModel fornecedor) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();
        session.update(fornecedor);
        session.getTransaction().commit();
    }

    /**
     * @description busca um fornecedor
     * @param id (identiificador do fornecedor)
     * @return FornecedorModel (objeto fornecedor)
     * @author Thiago Cezar Silverio
     */
    public FornecedorModel getFornecedor(int id) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        return (FornecedorModel) session.load(FornecedorModel.class, id);
    }

    /**
     * @description busca todos os fornecedors
     * @param
     * @return lista (lista de objetos fornecedor)
     * @author Thiago Cezar Silverio
     */
    public List<FornecedorModel> getTodos() {
        List<FornecedorModel> listaFornecedor = new ArrayList<FornecedorModel>();
        FornecedorDao dao = new FornecedorDaoImp();
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        List query = session.createSQLQuery("select idfornecedor from fornecedor").list();
        // obtém os fornecedores contidos no Vector
        for (int i = 0; i < query.size(); i++) {
            String valor = query.get(i).toString();
            listaFornecedor.add(dao.getFornecedor(Integer.parseInt(valor)));
        }
        return listaFornecedor;
    }
    /**
     * @description busca de atributos para popular combos
     * @param
     * @return lista (lista de objetos ComboGenericModel)
     * @author Thiago Cezar Silverio
     */
    public List<ComboGenericModel> getUfFornecedor() {
        List<ComboGenericModel> listaFornecedor = new ArrayList<ComboGenericModel>();
        FornecedorModel forn = new FornecedorModel();
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        List query = session.createSQLQuery("select idfornecedor from fornecedor group by uf, idfornecedor").list();
        // obtém os fornecedores contidos no Vector
        for (int i = 0; i < query.size(); i++) {
            int id = Integer.parseInt(query.get(i).toString());
            forn =(FornecedorModel) session.load(FornecedorModel.class, id);
            ComboGenericModel combo = new ComboGenericModel(forn.getIdfornecedor(), forn.getUf());
            listaFornecedor.add(combo);
        }
        return listaFornecedor;
    }
    public List<ComboGenericModel> getCidadeFornecedor() {
        List<ComboGenericModel> listaFornecedor = new ArrayList<ComboGenericModel>();
        FornecedorModel forn = new FornecedorModel();
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction t = session.beginTransaction();
        List query = session.createSQLQuery("select idfornecedor from fornecedor group by cidade, idfornecedor").list();
        // obtém os fornecedores contidos no Vector
        for (int i = 0; i < query.size(); i++) {
            int id = Integer.parseInt(query.get(i).toString());
            forn =(FornecedorModel) session.load(FornecedorModel.class, id);
            ComboGenericModel combo = new ComboGenericModel(forn.getIdfornecedor(), forn.getCidade());
            listaFornecedor.add(combo);
        }
        return listaFornecedor;
    }
}
